package org.osiris.client;


import org.osiris.client.comandos.ComandoMenuPrincipal;
import org.osiris.client.model.UsuarioViewBean;
import org.osiris.client.services.AuthenticationService;
import org.osiris.client.services.AuthenticationServiceAsync;
import org.osiris.client.utils.AutoErrorHandlingAsyncCallback;
import org.osiris.client.utils.Constantes;
import org.osiris.client.utils.Md5;
import org.osiris.client.utils.StyleSheetLoader;

import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Window;
import com.extjs.gxt.ui.client.widget.form.LabelField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.layout.AbsoluteData;
import com.extjs.gxt.ui.client.widget.layout.AbsoluteLayout;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;


public class Privado implements EntryPoint {
	private AuthenticationServiceAsync authenticationServiceAsync=AuthenticationService.Util.getInstance();
	private RootPanel rootPanel;
	private ContentPanel principal;
	public ContentPanel cpCuerpo;
	public void onModuleLoad() {
		rootPanel = RootPanel.get();
		String styleSheet = "../AfuptoolGWT.css";
		String modulePath = GWT.getModuleBaseURL();
		StyleSheetLoader.loadStyleSheet(modulePath + styleSheet);
		createPanels(rootPanel);
	}
	private void createPanels(RootPanel rootPanel) {
		/**PREINCIPAL*/
		principal = new ContentPanel();
		principal.setHeaderVisible(false);
		principal.setBorders(true);
		principal.setTitle("Principal");       
		principal.setStyleName("cpPrincipal");
		/*CABEZERA*/
		DockPanel hpCabecera = new DockPanel();
		hpCabecera.setStyleName("hpCabecera");
		principal.add(hpCabecera);
		LabelField lfTitulo = new LabelField("Osiris-Plataforma Gesti\u00F3n de requisitos");
		lfTitulo.setStyleName("lfTitulo");
		hpCabecera.add(lfTitulo, DockPanel.WEST);
		principal.add(hpCabecera);		             
		RootPanel.get().add(principal);
		/**CPCUERPO**/
		cpCuerpo = new ContentPanel();
		cpCuerpo.setHeaderVisible(false);
		cpCuerpo.setStyleName("cpCuerpoLogin");
		cpCuerpo.setBorders(true);
		/**HPSUPERIOR**/
		HorizontalPanel hpSuperior=getMigas("Acceso privado");
		cpCuerpo.add(hpSuperior);		
		cpCuerpo.add(createUserForm());				
		cpCuerpo.add(crearBotonera());                
		RootPanel.get().add(cpCuerpo);
	}
	public static HorizontalPanel getMigas(String texto){
		HorizontalPanel hpSuperior=new HorizontalPanel();
		hpSuperior.setStyleName("panelExterno");
		LabelField miga = new LabelField(texto);
		miga.setStyleName(Constantes.ESTILO_NAVEGACION);
		hpSuperior.add(miga);//MIGAS
		hpSuperior.setCellHorizontalAlignment(miga, HasHorizontalAlignment.ALIGN_LEFT);
		return hpSuperior;
	}
	public static HorizontalPanel getBotonera(){
		HorizontalPanel hpBotonera = new HorizontalPanel();
		hpBotonera.setStyleName(Constantes.ESTILO_BOTONERA);
		hpBotonera.setWidth("100%");
		HorizontalPanel hpBoton = new HorizontalPanel();
		hpBoton.setStyleName("panelExterno");
		hpBotonera.add(hpBoton);
		return hpBotonera;
	}
	private HorizontalPanel crearBotonera() {
		HorizontalPanel hpBotonera = new HorizontalPanel();
		hpBotonera.setStyleName(Constantes.ESTILO_BOTONERA);
		hpBotonera.setWidth("100%");
		hpBotonera.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		hpBotonera.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);        
		HorizontalPanel hpBoton = new HorizontalPanel();
		hpBoton.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		hpBoton.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
		hpBoton.setStyleName("panelExterno");		
		hpBotonera.add(hpBoton);
		return hpBotonera;
	}
	private Widget createUserForm() {
		
		ContentPanel cp=new ContentPanel();
		
		cp.setHeading("Credenciales");
		cp.setSize("450", "200");
		cp.setLayout(new AbsoluteLayout());
		VerticalPanel verticalPanel = new VerticalPanel();
		verticalPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
		verticalPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		verticalPanel.setSpacing(5);
		HorizontalPanel horizontalPanel = new HorizontalPanel();
		horizontalPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		horizontalPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);

		horizontalPanel.setSpacing(5);

		LabelField lblfldUsername = new LabelField("Usuario");
		horizontalPanel.add(lblfldUsername);

		final TextField <String>textField = new TextField<String>();
		textField.setMaxLength(150);
		horizontalPanel.add(textField);

		verticalPanel.add(horizontalPanel);

		HorizontalPanel horizontalPanel_1 = new HorizontalPanel();
		verticalPanel.add(horizontalPanel_1);
		horizontalPanel_1.setSpacing(5);

		LabelField lblfldPassword = new LabelField("Password");
		horizontalPanel_1.add(lblfldPassword);

		final TextField <String>textField_1 = new TextField<String>();
		textField_1.setMaxLength(150);

		textField_1.setPassword(true);
		horizontalPanel_1.add(textField_1);
		cp.add(verticalPanel, new AbsoluteData(0, 0));		
		verticalPanel.setSize("448px", "105px");

		HorizontalPanel horizontalPanel_2 = new HorizontalPanel();
		horizontalPanel_2.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);

		horizontalPanel_2.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
		horizontalPanel_2.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		horizontalPanel_2.setSpacing(5);
		
				final LabelField loginStatus = new LabelField("");
				horizontalPanel_2.add(loginStatus);
		Button button_3 = new Button("Private");
		button_3.setStyleName(Constantes.ESTILO_BOTON);
		button_3.setText("Iniciar sesi\u00F3n");
		horizontalPanel_2.add(button_3);
		cp.add(horizontalPanel_2, new AbsoluteData(0, 105));
		horizontalPanel_2.setSize("446px", "42px");
		button_3.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				
				
				if(textField_1.getValue()!=null && textField.getValue()!=null){
					String pwd=Md5.convert(textField_1.getValue().toString());
					authenticationServiceAsync.authenticate(textField.getValue().toString(), pwd, new AutoErrorHandlingAsyncCallback<UsuarioViewBean>() {
						public void onSuccess(UsuarioViewBean result) {
							if (result!=null) {
								ComandoMenuPrincipal com=new ComandoMenuPrincipal(result);
								com.execute();
								
							} else {
								loginStatus.setText("your are currently NOT LOGGED IN");
							}
						}
					});
				}}
			
		});
		
		cp.setFrame(false);
		cp.setHeaderVisible(false);
		cp.setStyleAttribute("padding-top", "25px");
		cp.setStyleAttribute("padding-bottom", "25px");
		return cp;

	}	
	public static void mostrarMensaje(String titulo, String mensaje) {
		// Construimos la ventana
		final Window window = new Window();
		window.setWidth("400px");
		window.setModal(true);
		window.setResizable(false);
		window.setDraggable(false);
		window.setBorders(false);
		window.setBodyBorder(false);
		window.setFrame(false);
		window.setClosable(true);
		// Metemos el titulo de la ventana
		if (titulo == null || titulo.equals("") || titulo.equals(" ")) {
			window.getHeader().setText("Mensaje");
		} else {
			window.getHeader().setText(titulo);
		}
		window.getHeader().addStyleName("headerAyuda");
		window.setStyleAttribute("background-color", "white");

		VerticalPanel vpMensaje = new VerticalPanel();
		vpMensaje.setWidth("100%");
		vpMensaje.setHeight("100%");
		vpMensaje.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
		vpMensaje.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
		window.add(vpMensaje);

		// Texto
		LabelField label = new LabelField(mensaje);
		label.setAutoHeight(true);
		label.setAutoWidth(true);
		label.setStyleName(Constantes.LETRA_NEGRITA);
		label.setStyleAttribute("text-align", "center");
		vpMensaje.add(label);
		vpMensaje.setCellWidth(label, "75%");

		// Boton con su clickHandler
		final Button bAceptar = new Button("Aceptar");
		bAceptar.setStyleName(Constantes.ESTILO_BOTON);
		bAceptar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent evento) {
				if (evento.getSource() == bAceptar) {
					window.hide();
				}
			}
		});
		vpMensaje.add(bAceptar);
		vpMensaje.setCellWidth(bAceptar, "25%");

		window.show();
		window.center();
	}
	public static void mostrarMensajeSalida(String titulo, String mensaje,final Command com) {
		// Construimos la ventana
		final Window window = new Window();
		window.setWidth("400px");
		window.setModal(true);
		window.setResizable(false);
		window.setDraggable(false);
		window.setBorders(false);
		window.setBodyBorder(false);
		window.setFrame(false);
		window.setClosable(true);
		// Metemos el titulo de la ventana
		if (titulo == null || titulo.equals("") || titulo.equals(" ")) {
			window.getHeader().setText("Rechazar");
		} else {
			window.getHeader().setText(titulo);
		}
		window.getHeader().addStyleName("headerAyuda");
		window.setStyleAttribute("background-color", "white");

		VerticalPanel vpMensaje = new VerticalPanel();
		vpMensaje.setWidth("100%");
		vpMensaje.setHeight("100%");
		vpMensaje.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
		vpMensaje.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
		window.add(vpMensaje);

		// Texto
		LabelField label = new LabelField(mensaje);
		label.setAutoHeight(true);
		label.setAutoWidth(true);
		label.setStyleName(Constantes.LETRA_NEGRITA);
		label.setStyleAttribute("text-align", "center");
		vpMensaje.add(label);
		vpMensaje.setCellWidth(label, "75%");

		// Boton con su clickHandler
		final Button bAceptar = new Button("Aceptar");
		bAceptar.setStyleName(Constantes.ESTILO_BOTON);
		bAceptar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent evento) {
				if (evento.getSource() == bAceptar) {
					window.hide();
					com.execute();
				}
			}
		});
		vpMensaje.add(bAceptar);
		vpMensaje.setCellWidth(bAceptar, "25%");

		window.show();
		window.center();

	}
	public static void mostrarMensajeConfirmacion(String titulo, String mensaje,final Command com) {
		// Construimos la ventana
		final Window window = new Window();
		window.setWidth("400px");
		window.setModal(true);
		window.setResizable(false);
		window.setDraggable(false);
		window.setBorders(false);
		window.setBodyBorder(false);
		window.setFrame(false);
		window.setClosable(true);
		// Metemos el titulo de la ventana
		if (titulo == null || titulo.equals("") || titulo.equals(" ")) {
			window.getHeader().setText("Osiris");
		} else {
			window.getHeader().setText(titulo);
		}
		window.getHeader().addStyleName("headerAyuda");
		window.setStyleAttribute("background-color", "white");

		VerticalPanel vpMensaje = new VerticalPanel();
		HorizontalPanel hpMensaje = new HorizontalPanel();
		vpMensaje.setWidth("100%");
		vpMensaje.setHeight("100%");
		vpMensaje.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
		vpMensaje.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
		window.add(vpMensaje);

		// Texto
		LabelField label = new LabelField(mensaje);
		label.setAutoHeight(true);
		label.setAutoWidth(true);
		label.setStyleName(Constantes.LETRA_NEGRITA);
		label.setStyleAttribute("text-align", "center");
		vpMensaje.add(label);
		vpMensaje.setCellWidth(label, "75%");

		// Boton con su clickHandler
		final Button bAceptar1 = new Button("Aceptar");
		bAceptar1.setStyleName(Constantes.ESTILO_BOTON);
		bAceptar1.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent evento) {
				if (evento.getSource() == bAceptar1) {
					window.hide();
					com.execute();
				}
			}
		});
		
		vpMensaje.setCellWidth(bAceptar1, "25%");
		final Button bAceptar = new Button("Cancelar");
		bAceptar.setStyleName(Constantes.ESTILO_BOTON);
		bAceptar.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent evento) {
				if (evento.getSource() == bAceptar) {
					window.hide();					
				}
			}
		});
		hpMensaje.add(bAceptar);
		hpMensaje.add(bAceptar1);
		hpMensaje.setSpacing(5);
		vpMensaje.add(hpMensaje);
		vpMensaje.setCellWidth(bAceptar, "25%");
		window.show();
		window.center();

	}
}
